package com.morn.weibo;

import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.widget.Toast;

import com.morn.weibo.fragment.ConversationFragment;
import com.morn.weibo.fragment.MoreFragment;
import com.morn.weibo.fragment.StatusListFragment;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// requestWindowFeature(android.view.Window.FEATURE_PROGRESS);

		final ActionBar bar = getActionBar();
		bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

		Bundle firstPageBundle = new Bundle();
		firstPageBundle.putInt(StatusListFragment.STATUS_LIST_TYPE,
				StatusListFragment.TYPE_STATUS_FIRSTPAGE);
		bar.addTab(bar
				.newTab()
				.setText(R.string.first_page)
				.setTabListener(
						new TabListener<StatusListFragment>(this, "firstPage",
								StatusListFragment.class, firstPageBundle)));
		Bundle atMeBundle = new Bundle();
		atMeBundle.putInt(StatusListFragment.STATUS_LIST_TYPE,
				StatusListFragment.TYPE_STATUS_ATME);
		bar.addTab(bar
				.newTab()
				.setText(R.string.at_me)
				.setTabListener(
						new TabListener<StatusListFragment>(this, "atMe",
								StatusListFragment.class, atMeBundle)));
		bar.addTab(bar
				.newTab()
				.setText(R.string.message)
				.setTabListener(
						new TabListener<ConversationFragment>(this, "message",
								ConversationFragment.class)));
		bar.addTab(bar
				.newTab()
				.setText(R.string.more)
				.setTabListener(
						new TabListener<MoreFragment>(this, "more",
								MoreFragment.class)));

		if (savedInstanceState != null) {
			bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
		}
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
	}

	public static class TabListener<T extends Fragment> implements
			ActionBar.TabListener {
		private final Activity mActivity;
		private final String mTag;
		private final Class<T> mClass;
		private final Bundle mArgs;
		private Fragment mFragment;

		public TabListener(Activity activity, String tag, Class<T> clz) {
			this(activity, tag, clz, null);
		}

		public TabListener(Activity activity, String tag, Class<T> clz,
				Bundle args) {
			mActivity = activity;
			mTag = tag;
			mClass = clz;
			mArgs = args;

			// Check to see if we already have a fragment for this tab, probably
			// from a previously saved state. If so, deactivate it, because our
			// initial state is that a tab isn't shown.
			mFragment = mActivity.getFragmentManager().findFragmentByTag(mTag);
			if (mFragment != null && !mFragment.isDetached()) {
				FragmentTransaction ft = mActivity.getFragmentManager()
						.beginTransaction();
				ft.detach(mFragment);
				ft.commit();
			}
		}

		public void onTabSelected(Tab tab, FragmentTransaction ft) {
			if (mFragment == null) {
				mFragment = Fragment.instantiate(mActivity, mClass.getName(),
						mArgs);
				ft.add(android.R.id.content, mFragment, mTag);
			} else {
				ft.attach(mFragment);
			}
		}

		public void onTabUnselected(Tab tab, FragmentTransaction ft) {
			if (mFragment != null) {
				ft.detach(mFragment);
			}
		}

		public void onTabReselected(Tab tab, FragmentTransaction ft) {
			Toast.makeText(mActivity, "Reselected!", Toast.LENGTH_SHORT).show();
		}
	}
}
